package ds;

public class MyTree {
    public static class Node {
        /**
         * 节点存储的技能对象，例如穿墙，加速，无敌等
         */
        public SkillTree.Skill val;
        public Node left, right;
        public Node(SkillTree.Skill v) { val = v; }
    }
    private Node root;
    /**
     * 插入一个技能节点到二叉树
     * @param val 技能节点
     */
    public void insert(SkillTree.Skill val) {
    	root = insert(root, val);
    }
    /**
     * 递归插入节点
     * @param node 当前节点
     * @param val 技能节点
     * @return 插入后的子树根节点
     */
    private Node insert(Node node, SkillTree.Skill val) {
        // TODO: 待实现
        return null;
    }
    /**
     * 获取二叉树根节点
     * @return 根节点
     */
    public Node getRoot() { 
        return root;
    }
    /**
     * 先序遍历，返回所有技能节点列表
     * @return 技能节点列表
     */
    public java.util.List<SkillTree.Skill> traverse() {
        java.util.List<SkillTree.Skill> result = new java.util.ArrayList<>();
        traverse(root, result);
        return result;
    }
    /**
     * 递归遍历节点，将节点加入到result中
     * @param node 当前节点
     * @param result 技能节点列表
     */
    private void traverse(Node node, java.util.List<SkillTree.Skill> result) {
        // TODO: 待实现
    }
    /**
     * 获取二叉树深度
     * @return 树的最大深度
     */
    public int getDepth() {
    	return getDepth(root);
    }
    /**
     * 递归获取深度
     * @param node 当前节点
     * @return 以node为根的子树深度
     */
    private int getDepth(Node node) {
        // TODO: 待实现
        return 0;
    }
    /**
     * 获取节点总数
     * @return 节点个数
     */
    public int getNodeCount() {
    	return getNodeCount(root);
    }
    /**
     * 递归获取节点数
     * @param node 当前节点
     * @return 以node为根的子树节点数
     */
    private int getNodeCount(Node node) {
        // TODO: 待实现
        return 0;
    }
    /**
     * 获取叶子节点个数
     * @return 叶子节点个数
     */
    public int getLeafCount() {
    	return getLeafCount(root);
    }
    /**
     * 递归获取叶子节点数
     * @param node 当前节点
     * @return 以node为根的子树叶子节点数
     */
    private int getLeafCount(Node node) {
        // TODO: 待实现
        return 0;
    }
} 